package criterioOrden;

import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import java.util.ArrayList;
import java.util.List;

import model.Publicacion.Pregunta;
import model.Publicacion.Respuesta;
import model.criterio.criterioOrden.CriterioOrdenFechaRes;
import model.criterio.criterioOrden.Orden;

import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

public class TestCriterioOrdenFechaRes {
	CriterioOrdenFechaRes c;
	Pregunta p;
	Pregunta p1;
	
	Respuesta r;
	Respuesta r1;
	List<Respuesta> l;
	List<Respuesta> l1;

	@Before
	public void setUp() throws Exception {
		c=new CriterioOrdenFechaRes(Orden.ASC);
		p=mock(Pregunta.class);
		p1=mock(Pregunta.class);
		r=mock(Respuesta.class);
		r1=mock(Respuesta.class);
		l=new ArrayList<Respuesta>();
		l1=new ArrayList<Respuesta>();
	}

	@Test
	public void testCompare() {
		when(r.getFecha()).thenReturn(DateTime.now());
		when(r1.getFecha()).thenReturn(DateTime.now());
		l.add(r);
		l1.add(r1);
		when(p.getRespuestas()).thenReturn(l);
		when(p1.getRespuestas()).thenReturn(l1);
		when(p.getCantRespuestas()).thenReturn(l.size());
		when(p1.getCantRespuestas()).thenReturn(l1.size());
		Assert.assertEquals(0, c.compare(p, p1));
		
		verify(r,times(1)).getFecha();
		verify(r1,times(1)).getFecha();
		verify(p,times(1)).getRespuestas();
		verify(p1,times(1)).getRespuestas();
		verify(p,times(1)).getCantRespuestas();
		verify(p1,times(1)).getCantRespuestas();
		
		
		when(r.getFecha()).thenReturn(new DateTime(2014, 10, 10, 0, 0,DateTimeZone.UTC));
		Assert.assertEquals(-1, c.compare(p, p1));
		
		when(r1.getFecha()).thenReturn(new DateTime(2014, 9, 10, 0, 0,DateTimeZone.UTC));
		Assert.assertEquals(1, c.compare(p, p1));
	}

}
